iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
Security

密碼學小白的學習之路系列 第 14

[Day 14] 題目(Modular-7) & 歐拉準則 & 勒讓得符號

  • 分享至 

  • xImage
  •  

歐拉準則(Euler's Criterion)

https://ithelp.ithome.com.tw/upload/images/20240821/20168165UrdwIMBECE.png

勒讓得符號,二次特徵(Legendre Symbol)

https://ithelp.ithome.com.tw/upload/images/20240821/20168165gZgbA2ARbC.png

https://ithelp.ithome.com.tw/upload/images/20240821/20168165gEBgJ4bzgB.png

Legendre Symbol

https://cryptohack.org/courses/modular/root1/
https://ithelp.ithome.com.tw/upload/images/20240821/20168165Y8mKz6gUkx.png

題意:

介紹勒讓德符號 (Legendre Symbol)的概念,以及如何利用它來判斷一個數是否為模p的二次剩餘,相關概念上面都介紹過了,這裡就不再贅述。

題目給了我們一個output.txt檔,裡面有1024位的質數p和10個整數,我們要找出其中的二次剩餘,並計算其平方根(較小的就是解)。

此外,題目特別指出,當p滿足p≡3 (mod 4) 時,可以利用費馬小定理方便地計算平方根。查了一下後發現,當 p ≡ 3 (mod 4) 時a的平方根 = ±a^((p+1)/4)
https://ithelp.ithome.com.tw/upload/images/20240821/20168165CvLTRhhQVu.png

解題過程:

​貼上題目給的p和ints

#二次剩餘: (a / p) ≡ a^((p-1)/2) mod p =1
# p=3%4
# p ≡ 3 (mod 4) 時a的平方根 = ±a^((p+1)/4)
# x² ≡ a (mod p)
# find the quadratic residue and then calculate its square root; 
#the square root is your flag. Of the two possible roots, submit the larger one as your answer
p = 101524035174539890485408575671085261788758965189060164484385690801466167356667036677932998889725476582421738788500738738503134356158197247473850273565349249573867251280253564698939768700489401960767007716413932851838937641880157263936985954881657889497583485535527613578457628399173971810541670838543309159139
ints = [25081841204695904475894082974192007718642931811040324543182130088804239047149283334700530600468528298920930150221871666297194395061462592781551275161695411167049544771049769000895119729307495913024360169904315078028798025169985966732789207320203861858234048872508633514498384390497048416012928086480326832803, 45471765180330439060504647480621449634904192839383897212809808339619841633826534856109999027962620381874878086991125854247108359699799913776917227058286090426484548349388138935504299609200377899052716663351188664096302672712078508601311725863678223874157861163196340391008634419348573975841578359355931590555, 17364140182001694956465593533200623738590196990236340894554145562517924989208719245429557645254953527658049246737589538280332010533027062477684237933221198639948938784244510469138826808187365678322547992099715229218615475923754896960363138890331502811292427146595752813297603265829581292183917027983351121325, 14388109104985808487337749876058284426747816961971581447380608277949200244660381570568531129775053684256071819837294436069133592772543582735985855506250660938574234958754211349215293281645205354069970790155237033436065434572020652955666855773232074749487007626050323967496732359278657193580493324467258802863, 4379499308310772821004090447650785095356643590411706358119239166662089428685562719233435615196994728767593223519226235062647670077854687031681041462632566890129595506430188602238753450337691441293042716909901692570971955078924699306873191983953501093343423248482960643055943413031768521782634679536276233318, 85256449776780591202928235662805033201684571648990042997557084658000067050672130152734911919581661523957075992761662315262685030115255938352540032297113615687815976039390537716707854569980516690246592112936796917504034711418465442893323439490171095447109457355598873230115172636184525449905022174536414781771, 50576597458517451578431293746926099486388286246142012476814190030935689430726042810458344828563913001012415702876199708216875020997112089693759638454900092580746638631062117961876611545851157613835724635005253792316142379239047654392970415343694657580353333217547079551304961116837545648785312490665576832987, 96868738830341112368094632337476840272563704408573054404213766500407517251810212494515862176356916912627172280446141202661640191237336568731069327906100896178776245311689857997012187599140875912026589672629935267844696976980890380730867520071059572350667913710344648377601017758188404474812654737363275994871, 4881261656846638800623549662943393234361061827128610120046315649707078244180313661063004390750821317096754282796876479695558644108492317407662131441224257537276274962372021273583478509416358764706098471849536036184924640593888902859441388472856822541452041181244337124767666161645827145408781917658423571721, 18237936726367556664171427575475596460727369368246286138804284742124256700367133250078608537129877968287885457417957868580553371999414227484737603688992620953200143688061024092623556471053006464123205133894607923801371986027458274343737860395496260538663183193877539815179246700525865152165600985105257601565] 
for i in ints: # 遍歷ints中的每一個元素
    l=pow(i,(p-1)//2,p) # l是勒讓得符號
    if l==1: # 如果勒讓得符號=1,則代表 i是二次剩餘
        print(pow(i,(p+1)//4,p)) # 因為題目說 p ≡ 3 (mod 4) 時a的平方根 = ±a^((p+1)/4)

最後得到的數值就是flag。

93291799125366706806545638475797430512104976066103610269938025709952247020061090804870186195285998727680200979853848718589126765742550855954805290253592144209552123062161458584575060939481368210688629862036958857604707468372384278049741369153506182660264876115428251983455344219194133033177700490981696141526

參考資料

歐拉準則:
wiki: https://zh.wikipedia.org/zh-tw/%E6%AC%A7%E6%8B%89%E5%87%86%E5%88%99
勒讓德符號:
wiki: https://zh.wikipedia.org/zh-tw/%E5%8B%92%E8%AE%A9%E5%BE%B7%E7%AC%A6%E5%8F%B7
wiki: https://en.wikipedia.org/wiki/Legendre_symbol
oi-wiki: https://oi-wiki.org/math/number-theory/quad-residue/#legendre-%E7%AC%A6%E5%8F%B7
Brilliant: https://brilliant.org/wiki/legendre-symbol/
前人的文章: https://ithelp.ithome.com.tw/m/articles/10324591

後話

這些數學式和符號好難顯示。更:有修改了一些錯誤以及顯示的格式問題


上一篇
[Day13] 題目(Modular-6) & 二次剩餘
下一篇
[Day 15] 題目(Modular-8) & Tonelli-Shanks算法 & 質數模4的分類
系列文
密碼學小白的學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言